//
//  main.m
//  第一个OC类
//
//  Created by 许文娟 on 2024/1/9.
//


#import <Foundation/Foundation.h>
/*
 手机
 C语言中函数分为声明和实现
 OC中定义一个类也分为声明和实现，在OC中定义类就是写累的声明和实现
 */

/*
 1、编写类的声明：以 @interface开头 @end结尾
    类名的首字母大写
    声明类的目的就是为了告诉系统，类中有哪些属性和行为
 */
//OC类声明中属性只能写在 @interface和 @end之间的{}里
//编写OC类属性时，建议将所有属性前都加上“_”

//NSObject为了让我们的Iphone类具备创建对象的能力
@interface Iphone:NSObject
//属性
{
    //默认OC对象中的属性不能直接访问
    
    @public  //属性公开
    float _model; //型号
    int _cpu;
    double _size; //尺寸
    int _color; //颜色
}
//行为

@end

//2、编写类的实现
/*
 以 @implementation开头，以 @end结尾，然后在class对应的地方写上声明时类的名称
 */
@implementation Iphone
//行为的实现

@end

int main(int argc, const char * argv[]) {
   //如何通过一个类创建一个对象
   // 给类发送一个消息=C语言中调用方法
    /*
     如何发送消息？在OC中只要想要发送消息就先写上 [类名称/对象名称 方法名称]；
     发送什么消息（调用什么方法）可以创建一个对象？ new消息
     */

    /*
     只要通过一个类调用的new方法，也就是给类发送一份叫做new的消息后系统内部就会做3件事
     1、为Iphone类创建出来的对象分配存储空间
     2、初始化Iphone类创建出来的对象中的属性
     3、返回Iphone类创建出来的对象对应的地址
     */
    
    //通过一个Iphone类型的指针接受类一个Iphone对象的地址
    
    //如果使用了一个指针保存了某个对象的地址，那么我们就称这个指针为某个类型的对象
    //利用Iphone类型的指针保存了Iphone对象的地址，那么我们就称Iphone类型的指针p为Iphone对象
    Iphone *p = [Iphone new];
    p->_size = 3.5;
    p->_color = 0;
    p->_model = 4;
    p->_cpu = 1;
    
    //OC 中的类本质就是一个结构体，所以p这个指针其实就是指向了一个结构体
    NSLog(@"size=%f,color=%i,model=%f,cpu=%i",p->_size,p->_color,p->_model,p->_cpu);
    return 0;
}
